我的软路由折腾之旅 篇二:打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

您所在的位置:网站首页 openwrt 添加驱动 我的软路由折腾之旅 篇二:打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

我的软路由折腾之旅 篇二:打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

2023-10-21 03:05| 来源: 网络整理| 查看: 265

我的软路由折腾之旅 篇二:打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网 2020-06-05 14:52:41 45点赞 355收藏 42评论

创作立场声明:这里需要感谢lean大辛勤的更新固件,以及网上各位高人发出的各种视频。这里没有什么原创的东西,只是汇总了编译过程中的坑和我个人解决时候的一些经验。本人能力有限,超纲问题基本答不上来。请大家遵守法规,文明评论!

引子:

本来第二篇想写docker下运行openwrt来着。但是尝试下来这种方式有局限,目前只在ubuntu和debian下尝试成功了,如果看了我htpc+nas系列的小伙伴使用omv或者u-nas的朋友可以后续等一下我这篇文章。使用docker跑openwrt做旁路由。至于DSM的docker和libreelec下面的docker我不清楚是docker不完整还是系统本身的问题,能看到软路由的界面,也能设置,但是想用的功能全都用不了。所以原本第二篇写docker的部分往后放一些,毕竟和主线关系不大,这一篇分成两部分,第一部分是虚拟机或者WSL中搭建编译环境,第二部分介绍虚拟机环境中的编译过程,添加JME网卡驱动,以及功能模块。前一篇很多评论提到咸鱼卖家的问题,我只能说我可能比较单纯,没确认过是不是抠脚大汉,但是不重要,毕竟垃圾佬的任务是捡垃圾,所以大家就不要太过纠结了,毕竟都知道咸鱼翻车的几率比较大,还是找售后相对可靠的卖家保险一些。

编译前的准备工作:

1. 准备好速度快且稳定的外网环境,这一点至关重要,因为编译过程中很多程序需要从外网下载,如果网络不稳定很容易造成编译失败。

2. 宿主机系统要足够稳定可靠,CPU性能越强大越好。以intel的7代 i7 7700为例,我在虚拟机中首次编译的时间大约要6-8个小时。我自己笔记本3代的i5 3320M编译的时间差不多要14个小时以上。

VMWARE虚拟机编译过程:1. 虚拟机中搭建编译环境

我讲解一下设置成本地代理服务器的方法,这个代理服务器给虚拟机提供访问外网的环境,不然编译是无法顺利完成的。打开三角形图标的软件,任务栏图标上点右键,点击选项设置。我这里把服务器负载均衡给关了,干嘛用的我也不知道,反正关了速度反而快了。

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

这里把允许来自局域网的连接打开,本地端口默认1080即可。这里把允许来自局域网的连接打开,本地端口默认1080即可。

外部网络设置好以后,我们使用的vmware虚拟机安装ubuntu18.04。当然debian10,lubuntu18.04这些差不多的版本都是没问题的。虚拟机安装ubuntu的教程网上有很多,这里就偷懒不写了。只把创建虚拟机的设置贴上来给大家参考。需要注意的两个点是虚拟机的网卡要设置成桥接模式与宿主机处在同一个网段内,另外是给ubuntu分配的硬盘可以大一点,比如我分了50G,使用动态容量实际占用不会这么大,为了避免编译过程中硬盘不足设置的稍微大一点,我认为20G保底是应该有的。

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

安装好虚拟机的ubuntu,我们在虚拟机中通过命令行安装ssh server。打开终端,输入 sudo apt-get install -y openssh-server,准备好ssh登录工具,例如putty或者xshell通过ssh登录到虚拟机的ubuntu系统中,这时候虚拟机就可以最小化了。这一步不是必须的,如果你喜欢完全可以在虚拟机的终端中操作,但是为了后续粘贴方便推荐在ssh客户端中进行。

安装ssh的功能以后还需要安排一下sshd的配置文件,避免ssh客户端连接过程中半路断了,那就坑了个大爹了。

1. 配置服务端

nano /etc/ssh/sshd_config

1)找到 ClientAliveInterval参数,如果没有就自己加一行

数值是秒,比如你设置为120 ,则是2分钟

ClientAliveInterval 120

2)ClientAliveCountMax

指如果发现客户端没有相应,则判断一次超时,这个参数设置允许超时的次数。如3 、4、5等自定义。

修改两项参数后如下:

ClientAliveInterval 120

ClientAliveCountMax 0 ###在不允许超时次数

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

2、 配置客户端

#vi /etc/ssh/ssh_config

然后找到里面的

ServerAliveInterval

参数,如果没有,你同样自己加一个就好了,参数意义相同,都是秒数,比如5分钟等。

ServerAliveInterval 300

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

设置好以后,不管用putty还是xshell应该都不容易断了。然后我们继续设置ubuntu的使用代理服务器的方法。

这里演示利用xshell登录后的过程,使用ubuntu设定的用户名密码登录,例如我设置的用户名为openwrt。登陆以后输入sudu su,进入root权限。

3. 安装ubuntu系统后更新系统,安装必要的依赖。(如果官方源速度慢可以更新为国内源,具体方法请百度。)

apt-get update

apt-get upgrade

apt-get -y install build-essential asciidoc binutils bzip2 gawk gettext git libncurses5-dev libz-dev patch python3.5 python2.7 unzip zlib1g-dev lib32gcc1 libc6-dev-i386 subversion flex uglifyjs git-core gcc-multilib p7zip p7zip-full msmtp libssl-dev texinfo libglib2.0-dev xmlto qemu-utils upx libelf-dev autoconf automake libtool autopoint device-tree-compiler g++-multilib antlr3 gperf wget

4. 接下来修改ubuntu配置文件,让系统使用宿主机代理。

输入 nano ~/.bashrc

查看下主机的ip地址,例如我的是192.168.1.2,大家修改成自己的。

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

在~/.bashrc文件最后加上如下两行,意思是指定ubuntu的http的代理走宿主机ip地址的1080端口,https协议也走宿主机的http的1080端口,之所以没写成https因为ubuntu自带的这个代理协议不支持打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网。不过反正都是从机场通往外网。不管什么端口转发,实际使用过程中没有区别,只需要根据自己的宿主机的ip地址来修改就可以了。

export http_proxy=http://192.168.1.2:1080

export https_proxy=http://192.168.1.2:1080

然后用键盘的ctrl+x退出,点保存。

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

输入 source ~/.bashrc 让配置生效。

为了验证现在是不是能够访问到外网还需要用到curl命令,ubuntu默认是没有自带这个工具的,需要安装。因为已经在root环境,所以我前面不输入sudo了。

apt -y install curl

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

然后curl http://google.cn 查看是否能够连通

出现如下提示说明连通了出现如下提示说明连通了

我们再测试下https是否连通

curl https://google.cn

出现如下提示说明连通了出现如下提示说明连通了

因为lean大的openwrt不支持在root用户环境下编译,需要输入命令禁用环境。

5. 添加环境变量,避免root用户编译失败。

export FORCE_UNSAFE_CONFIGURE=1

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

6. 进入home/用户名所在目录,准备编译。

cd /home/openwrt

https://github.com/coolsnowwolf/lede 进入这个网址来到lean的openwrt的页面。编译过程中会在/home/用户名所在目录中创建一个lede目录。在这个之前还需要在ubuntu中安装所需依赖。我已经使用root用户登录,所有命令忽略sudo。

这部分安装的程序比较多,大家可以休息一下。

7. git clone https://github.com/coolsnowwolf/lede

这部分就看大家机场的速度了,如果网不好几个小时也是有可能的,所以请一直全局使用外网。

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

进入lede目录:cd lede

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

8.我到这一步开始会添加网卡驱动和第三方应用插件,请不要按照官方提示下载feeds。

8.1 插入JME千兆网卡驱动

lean大的openwrt中是没有编译JME驱动的,如果按照官方的步骤到make menuconfig阶段是找不到JME网卡驱动的,但是JME驱动在linux内核中是支持的,所以这里需要安排一下网卡的配置文件,让openwrt编译过程中将JME的网卡驱动编译安装好。

nano package/kernel/linux/modules/netdevices.mk

里面最后把下面的这段话粘贴进去(其他网卡可以看下相应网卡在内核中的驱动文件):

define KernelPackage/jme SUBMENU:=$(NETWORK_DEVICES_MENU) TITLE:=JMicron(R) PCI-Express Gigabit Ethernet support DEPENDS:=@PCI_SUPPORT +kmod-mii KCONFIG:=CONFIG_JME FILES:=$(LINUX_DIR)/drivers/net/ethernet/jme.ko AUTOLOAD:=$(call AutoProbe,jme)endef

define KernelPackage/jme/description Kernel modules for JMicron(R) PCI-Express Gigabit Ethernet adaptersendef

$(eval $(call KernelPackage,jme))

平台这个编辑器,粘贴以后格式变了,给大家截个图。

参考图中的缩进格式参考图中的缩进格式

怕大家还是出错,我把地址分享给大家。https://github.com/coolsnowwolf/lede/issues/4543

这里感谢这位大神耐心解答,英雄不问出处,在下有礼了。这里感谢这位大神耐心解答,英雄不问出处,在下有礼了。

8.2 添加软件包,对初学者我推荐使用修改feeds.conf.default文件的方法。

nano feeds.conf.default 在下面空白处添加如下两行。

src-git kenzo https://github.com/kenzok8/openwrt-packages

src-git small https://github.com/kenzok8/small

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

然后保存退出,第三方软件包中包括如下程序,如果需要定制其他程序按照这个方法添加即可。(因为第三方他添加不是lean大的官方源,有可能会编译失败,我测试adguardhome编译不成功)

openwrt 固件编译自定义主题与软件

luci-app-openclash ------------------openclash图形

luci-app-advancedsetting ------------------系统高级设置

luci-theme-atmaterial ------------------atmaterial 三合一主题(适配18.06)

luci-app-aliddns ------------------阿里云ddns

luci-theme-argon-dark-new------------------适配19.07与18.06的主题

luci-app-eqos ------------------依IP地址限速

luci-app-gost ------------------隐蔽的https代理

luci-app-adguardhome ------------------去广告

luci-app-smartdns ------------------smartdns防污染

luci-app-passwall ------------------Lienol大神

luci-theme-argon_new ------------------适配19.07与18.06的主题

luci-app-ssr-plus ------------------Lean大神

luci-theme-opentomcat ------------------修复主机名错误(适配18.06)

luci-theme-opentomato ------------------修复主机名错误(适配18.06)

9. 接下来再按照正常流程继续走

在/home/openwrt/lede 目录下继续输入

./scripts/feeds update -a

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

./scripts/feeds install -a

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

然后进入编译目录 make menuconfig

进入主界面,默认是x86平台子系统是64位,这里尽量不要动。进入主界面,默认是x86平台子系统是64位,这里尽量不要动。

首先找到网卡驱动在Kernel modules->Network Devices->kmod-jme按y打上* (到这一步会截图说明)

然后方向键向右点exit,回车。然后方向键向右点exit,回车。

退回到初始界面中,找到luci进入applications,大家把自己需要的功能按y键勾选就可以了。这里解释一下按y是编译并安装,n是不编译不安装,m是编译但不安装。这里建议大家根据自己的需要选,不要选太多,我测试的情况adguardhome和lxc容易编译失败,请大家尽量不要勾选。

键盘方向键选到exit,再exit提示是否保存的时候选y键盘方向键选到exit,再exit提示是否保存的时候选y

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

10. 编译显卡驱动,为docker下的jellyfin利用核心显卡转码做准备。

下一步需要用内核编译的显卡驱动,方便以后docker中跑jellyfin的时候用核心显卡来转码。所以先不要着急按照官方教程去编译。

输入: make kernel_menuconfig

这一步系统需要进行编译,时间会比较久,大家该吃饭吃饭,该出去玩出去玩,具体时间看CPU的性能了,几十分钟到几小时都有可能。这一步系统需要进行编译,时间会比较久,大家该吃饭吃饭,该出去玩出去玩,具体时间看CPU的性能了,几十分钟到几小时都有可能。

久等之后终于进入内核设置界面久等之后终于进入内核设置界面

intel核心显卡设置路径Device Drivers——Graphics Support——Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)这里点y,出现子菜单。

我的显卡是ivy HD2500,属于intel 8xx/9xx/G3x/G4x/HD Graphics,在这里点y我的显卡是ivy HD2500,属于intel 8xx/9xx/G3x/G4x/HD Graphics,在这里点y

我把enable alpha的勾选了,也不知道有啥用。其他显卡请自行研究。我把enable alpha的勾选了,也不知道有啥用。其他显卡请自行研究。

我的显卡核心是HD Graphic,所以选了8xx/9xx这行,其他显卡请大家自行研究。然后还是方向键找到exit,退出时选择y保存。

11. 下载dl依赖库,提高编译成功率 (这一步也需要很久,多刷几次命令如果很快的过去就没问题,如果卡在某个软件在下载就需要再输入一次,直到很快的都刷完为止,争取所有的dl文件都下载好了。所谓磨刀不误砍柴工,不然编译失败整个要推倒重来非常麻烦)。

make -j8 download V=s

12. 开始编译(8年抗战开始打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网 )

make -j1 V=s

下面举例说一下我遇到过的问题,第一种就是出现一个download 什么什么什么,后面接一个error报错。这个是说这个文件没有下载,一般情况下用浏览器到这个网址把这个文件下载下来以后粘贴到lede下面的dl的文件夹中就可以了,然后再输入一次make -j1 V=s开始编译。(如果刷过几次make -j8 download V=s应该不会有这种报错)

还有一种就是下面这个图中出现的,我这次编译我遇到的第一个卡住的地方是adhomeguard,这个属于第三方插件,可能因为lean固件代码更新无法完成编译,这种我删掉lede文件夹再次编译仍然过不去,所以建议大家make menuconfig的时候不要勾选这个adguradhome,第二个报错就是lxc,这个属于lean大固件中自带的,查看报错位置以后需要删除掉报错提示error的这几个文件,然后删除./tmp文件夹,清除make缓存,然后重新编译。友情提示,毕竟编译比较艰难,选择几个自己需要的程序就行了,多少能提高点成功率。如果要安装adhomeguard可以编译好固件后通过ipk安装,教程后面发。

别以为回车就完事了,半路还有个程咬金呢,想起来刚才编译内核来着吗,点y回车继续跑代码别以为回车就完事了,半路还有个程咬金呢,想起来刚才编译内核来着吗,点y回车继续跑代码

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

然后删除./tmp文件夹,清空make然后删除./tmp文件夹,清空make

这下真的没有然后了,开着电脑该谁谁,该吃吃,偶尔回来瞄一眼,如果回到命令提示符说明编译完成(失败)了。编译成功以后用winscp登录ubuntu或者用虚拟机的ubuntu。但是因为网络不稳,可能中间会出现编译错误,这时候输入make clean,然后再执行一次编译命令,如果还不行,只能输入cd .. 命令退到openwrt文件夹下。

rm -rf lede 删除文件夹,再从第7部开始重新做,编译是一条不归路,祝大家好运。

编译成功后见到命令提示符编译成功后见到命令提示符

用winscp工具提取镜像文件

打开winscp点击新建打开winscp点击新建

打造自己需要的openwrt编译lean大固件的教程来啦!添加JME网

输入密码输入密码

找到lede目录找到lede目录

进入bin进入bin

进入target进入target

一路往下点,看到这个界面就看到编译好的固件了,刷机用combined这个img文件,虚拟机用vmdk一路往下点,看到这个界面就看到编译好的固件了,刷机用combined这个img文件,虚拟机用vmdk

这个文件是刷写用的,我们在上面点右键,复制。这个文件是刷写用的,我们在上面点右键,复制。

点击浏览,找个本地目录保存,我选的桌面点击浏览,找个本地目录保存,我选的桌面

内网速度还可以,一小会就拷贝出来了。内网速度还可以,一小会就拷贝出来了。

看到界面了,难掩内心激动,太难了。看到界面了,难掩内心激动,太难了。

到这里虚拟机编译的部分就讲完了,这里预祝大家成功。这里说明一下为啥非要在root用户下编译,因为普通用户下不能使用代理。

WIN10的WSL下进行编译

下面我介绍一个更简单的方法,因为原理差不多,我就不再水文章了,经常看我文章的人都知道,我喜欢讲干货。解释一下这个win10的WSL,这个是微软和ubuntu的基金会CanoicalGroupLimitid合作的一个项目,用于在win10下运行ubuntu子系统,优点是在windows下几乎原生的一个ubuntu系统,编译好的文件也会在c盘中可以直接拷贝出来,不需要利用winscp软件传出来。但是缺点是你需要有一个win10系统的主机,且C盘容量要够。如果只剩下几个G,我觉得还是算了吧。个人使用下来的感受是速度和虚拟机差不多,可能是第一次编译只使用单线程编译的缘故。win10系统的版本如果太老可能没有WSL子系统的选项,大家酌情考虑更换系统还是使用虚拟机。

控制面板程序中选择启用或关闭windows功能控制面板程序中选择启用或关闭windows功能

悬赏适用于linux的windows子系统悬赏适用于linux的windows子系统

在win10的app商店里安装ubuntu18.04如果你的win10没有这个商店,自己想办法吧,百度上搜好多教程。在win10的app商店里安装ubuntu18.04如果你的win10没有这个商店,自己想办法吧,百度上搜好多教程。

下载安装完成后第一次启动时间会比较久,不要手贱关闭。接下来会提示让你给这个子系统起个名字,比如我起的名字就是openwrt。接下来的过程和虚拟机中第3步到最后的过程一样。

提示一下,由于WSL是在宿主机上设置的,bashrc这里设置的IP地址可以改成:http://127.0.0.1:1080。减少WSL通过路由器找回自己的这个过程,当然使用192.168.1.2这样的本机IP地址也是可以用的。

先安装依赖,再修改网卡配置文件,和feeds配置文件添加网卡驱动以及第三方软件包,接着后面就是编译。为了怕有人问我要不要使用ssh客户端,我的答案是不用了,微软好容易折腾一个那么好能复制粘贴又不会掉线的窗口界面给你,就不要多此一举了。接下来就告诉大家,如何找编译好的固件。

C盘找到这个目录C盘找到这个目录

点查看,选项。把隐藏系统文件都关闭掉,都显示出来。点查看,选项。把隐藏系统文件都关闭掉,都显示出来。

把隐藏受保护文件,隐藏文件和文件夹都取消掉。把隐藏受保护文件,隐藏文件和文件夹都取消掉。

进入appdata进入appdata

进local进local

PackagePackage

CanoicalGroupLimitid是ubuntu的基金会,找这个ubuntuCanoicalGroupLimitid是ubuntu的基金会,找这个ubuntu

localstatelocalstate

rootfsrootfs

homehome

看到自己的用户目录吧,后面的我不教了,各位看官请允许我偷个懒。看到自己的用户目录吧,后面的我不教了,各位看官请允许我偷个懒。

结尾了,第一次写编译类的文章,帮助大家有入门,算不上严格意义上的教程。因为我在张大妈平台上找到的编译openwrt的文章并不多,写细节和排错的更是没有。所以我把网上查到对我有用的东西,包括b站视频各位up主的讲解的知识点,还有自己编译的写了一下。可以说是借花献佛了,请大家不要叫大神。

我个人水平有限,而且编译本身就需要一定的基础。所以就算跟着我的文章肯定还是有朋友编译不出来。但是因为有超纲的东西我就不在正文中发编译好的固件出来了,请大家理解。下一期的内容我打算做一次docker中跑openwrt的教程,如果您有感兴趣的话题,可以给我留言,这个系列的内容根据大家的需求调整。最后,感谢大家的收藏,关注,评论。

未经授权,不得转载


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3